Entity Framework এ CRUD অপারেশন (CRUD Operations in Entity Framework)

Microsoft Technologies - এন্টিটি ফ্রেমওয়র্ক (Entity Framework)
191
191

Entity Framework (EF) ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহার করা হয় এবং এটি CRUD অপারেশনগুলি (Create, Read, Update, Delete) সম্পাদন করতে সহায়তা করে। EF ডেভেলপারদের ডেটাবেস অপারেশন সহজে পরিচালনা করতে সুবিধা প্রদান করে, যেখানে আপনাকে SQL কোড লেখার প্রয়োজন হয় না। এই টিউটোরিয়ালে আমরা দেখব কিভাবে EF ব্যবহার করে CRUD অপারেশন সম্পাদন করা যায়।


Create Operation (তথ্য সন্নিবেশ)

Create অপারেশন ডেটাবেসে নতুন রেকর্ড সন্নিবেশ করতে ব্যবহৃত হয়। EF-এ একটি নতুন Entity তৈরি করে, DbContext এর Add বা AddAsync মেথড ব্যবহার করে ডেটাবেসে রেকর্ড সন্নিবেশ করা যায়।

উদাহরণ:

using (var context = new SchoolContext())
{
    var student = new Student
    {
        Name = "John Doe",
        Age = 20,
        Address = "123 Main Street"
    };
    
    // Add the student entity to the context
    context.Students.Add(student);
    
    // Save changes to the database
    context.SaveChanges();
}

এখানে:

  • context.Students.Add(student) দিয়ে একটি নতুন Student Entity যোগ করা হচ্ছে।
  • context.SaveChanges() দিয়ে পরিবর্তনগুলি ডেটাবেসে সেভ করা হচ্ছে।

Read Operation (তথ্য পড়া)

Read অপারেশন ডেটাবেস থেকে রেকর্ড পড়ার জন্য ব্যবহৃত হয়। EF তে LINQ (Language Integrated Query) ব্যবহার করে ডেটাবেসের রেকর্ডগুলো পড়া যায়।

উদাহরণ:

using (var context = new SchoolContext())
{
    // Retrieve all students from the database
    var students = context.Students.ToList();
    
    // Retrieve a specific student by id
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
    
    Console.WriteLine("Student Name: " + student.Name);
}

এখানে:

  • context.Students.ToList() দিয়ে সব ছাত্রের তালিকা পড়া হচ্ছে।
  • context.Students.FirstOrDefault() দিয়ে একটি নির্দিষ্ট Student রেকর্ড ID অনুযায়ী পড়া হচ্ছে।

LINQ কুয়েরি আরো জটিল হতে পারে, যেমন:

var studentsAbove18 = context.Students
    .Where(s => s.Age > 18)
    .OrderBy(s => s.Name)
    .ToList();

Update Operation (তথ্য আপডেট)

Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ডে পরিবর্তন করার জন্য ব্যবহৃত হয়। EF তে একটি Entity কে মডিফাই করে এবং SaveChanges() মেথড ব্যবহার করে আপডেট করা হয়।

উদাহরণ:

using (var context = new SchoolContext())
{
    // Retrieve the student to be updated
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
    
    if (student != null)
    {
        // Modify the student's information
        student.Name = "Updated Name";
        student.Age = 21;
        
        // Save the changes to the database
        context.SaveChanges();
    }
}

এখানে:

  • context.Students.FirstOrDefault() দিয়ে একটি নির্দিষ্ট Student Entity পড়া হচ্ছে।
  • Entity এর প্রপার্টি পরিবর্তন করা হচ্ছে এবং SaveChanges() দিয়ে পরিবর্তন ডেটাবেসে সেভ করা হচ্ছে।

Delete Operation (তথ্য মুছে ফেলা)

Delete অপারেশন ডেটাবেস থেকে একটি Entity মুছে ফেলার জন্য ব্যবহৃত হয়। EF তে একটি Entity কে মুছে ফেলার জন্য Remove() মেথড ব্যবহার করা হয়।

উদাহরণ:

using (var context = new SchoolContext())
{
    // Retrieve the student to be deleted
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
    
    if (student != null)
    {
        // Remove the student from the context
        context.Students.Remove(student);
        
        // Save the changes to the database
        context.SaveChanges();
    }
}

এখানে:

  • context.Students.Remove(student) দিয়ে Entity কে মুছে ফেলা হচ্ছে।
  • context.SaveChanges() দিয়ে ডেটাবেসে পরিবর্তন সেভ করা হচ্ছে।

Asynchronous CRUD অপারেশন

EF 6 এবং EF Core উভয়ই Asynchronous CRUD অপারেশন সমর্থন করে, যার মাধ্যমে ডেটাবেস অপারেশনগুলো ব্যাকগ্রাউন্ডে সম্পাদিত হয় এবং UI থ্রেড ব্লক না হয়।

উদাহরণ (Asynchronous Create):

using (var context = new SchoolContext())
{
    var student = new Student
    {
        Name = "Jane Doe",
        Age = 22,
        Address = "456 Another Street"
    };
    
    // Asynchronously add the student entity
    await context.Students.AddAsync(student);
    
    // Asynchronously save changes to the database
    await context.SaveChangesAsync();
}

উদাহরণ (Asynchronous Read):

using (var context = new SchoolContext())
{
    // Asynchronously retrieve a student
    var student = await context.Students.FirstOrDefaultAsync(s => s.StudentId == 1);
    
    Console.WriteLine("Student Name: " + student.Name);
}

LINQ ব্যবহার করে CRUD অপারেশন

EF তে LINQ (Language Integrated Query) ব্যবহার করে ডেটাবেস অপারেশন সহজেই করা যায়। LINQ এর মাধ্যমে filtering, sorting, এবং grouping এর মতো অপারেশন করা সম্ভব।

উদাহরণ (LINQ Read):

using (var context = new SchoolContext())
{
    var students = context.Students
        .Where(s => s.Age > 18)
        .OrderBy(s => s.Name)
        .ToList();
}

LINQ কুয়েরি ব্যবহার করে filter, join, এবং projection এর মতো আরও অনেক ধরনের জটিল কুয়েরি করা সম্ভব।


সারাংশ

Entity Framework ডেটাবেসের সাথে CRUD অপারেশন সহজেই সম্পাদন করতে সহায়ক। EF এর মাধ্যমে Create, Read, Update, এবং Delete অপারেশনগুলি কোডের মাধ্যমে সম্পন্ন করা সম্ভব, যেখানে SQL কোড লেখার প্রয়োজন হয় না। EF তে LINQ ব্যবহার করে ডেটাবেস কুয়েরি করা যায়, যা ডেভেলপারদের ডেটাবেস অপারেশন আরও সহজ এবং কার্যকরভাবে পরিচালনা করতে সাহায্য করে। Asynchronous অপারেশনও ব্যবহার করা সম্ভব, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সহায়তা করে।

common.content_added_by

Create, Read, Update, এবং Delete অপারেশন ইমপ্লিমেন্ট করা

181
181

Entity Framework (EF) এর মাধ্যমে Create, Read, Update, এবং Delete (CRUD) অপারেশনগুলো খুব সহজে পরিচালনা করা যায়। EF ডাটাবেসের সাথে যোগাযোগের জন্য DbContext এবং DbSet ক্লাস ব্যবহার করে এই অপারেশনগুলো সম্পাদন করা হয়। এখানে আমরা প্রতিটি CRUD অপারেশন কীভাবে EF এর মাধ্যমে বাস্তবায়িত করা যায় তা বিস্তারিতভাবে দেখব।


Create অপারেশন (Create Operation)

Create অপারেশন নতুন রেকর্ড ডেটাবেসে ইনসার্ট করতে ব্যবহৃত হয়। EF তে, আপনি একটি Entity ক্লাসের নতুন অবজেক্ট তৈরি করেন এবং সেটি DbSet এ অ্যাড করে ডেটাবেসে সেভ করতে পারেন।

Create অপারেশন উদাহরণ

using (var context = new SchoolContext())
{
    var newStudent = new Student
    {
        Name = "John Doe",
        Age = 20,
        Address = "1234 Elm St"
    };

    context.Students.Add(newStudent); // Add the new student to DbSet
    context.SaveChanges(); // Save changes to database
}

এখানে:

  • newStudent: একটি নতুন Student অবজেক্ট তৈরি করা হয়েছে।
  • context.Students.Add(newStudent): এই নতুন স্টুডেন্টকে Students টেবিলে অ্যাড করা হয়েছে।
  • context.SaveChanges(): ডেটাবেসে রেকর্ডটি সেভ করা হয়েছে।

Read অপারেশন (Read Operation)

Read অপারেশন ডেটাবেস থেকে ডেটা রিট্রাইভ বা পড়তে ব্যবহৃত হয়। EF তে, আপনি DbSet এর মাধ্যমে LINQ কুয়েরি ব্যবহার করে ডেটা রিড করতে পারেন।

Read অপারেশন উদাহরণ

using (var context = new SchoolContext())
{
    // একক স্টুডেন্ট রিড করা
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
    Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    
    // সকল স্টুডেন্ট রিড করা
    var allStudents = context.Students.ToList();
    foreach(var s in allStudents)
    {
        Console.WriteLine($"Name: {s.Name}, Age: {s.Age}");
    }
}

এখানে:

  • FirstOrDefault: StudentId ১ এর স্টুডেন্টটি রিড করে।
  • ToList(): সকল স্টুডেন্টকে তালিকায় রিটার্ন করে।

LINQ (Language Integrated Query) ব্যবহার করে আরও জটিল কুয়েরি করা সম্ভব, যেমন ফিল্টারিং, গ্রুপিং বা অর্ডারিং।


Update অপারেশন (Update Operation)

Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ডগুলির মান পরিবর্তন করতে ব্যবহৃত হয়। EF তে, একটি Entity এর অবজেক্টকে রিট্রাইভ করে তার প্রপার্টি পরিবর্তন করে, তারপর SaveChanges() কল করে আপডেট করা যায়।

Update অপারেশন উদাহরণ

using (var context = new SchoolContext())
{
    // প্রথমে স্টুডেন্টটি রিট্রাইভ করুন
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);
    
    if (student != null)
    {
        student.Name = "John Smith"; // Name পরিবর্তন
        student.Age = 21; // Age পরিবর্তন

        context.SaveChanges(); // Save changes to the database
    }
}

এখানে:

  • context.Students.FirstOrDefault: প্রথম স্টুডেন্টটি রিট্রাইভ করা হয়েছে।
  • SaveChanges(): প্রপার্টি আপডেট করার পর ডেটাবেসে পরিবর্তন সেভ করা হয়েছে।

EF তে, যখন একটি Entity ক্লাসের অবজেক্ট পরিবর্তন করা হয়, EF অটোমেটিক্যালি এটি ট্র্যাক করে এবং SaveChanges() কল করার মাধ্যমে পরিবর্তন ডেটাবেসে আপডেট হয়ে যায়।


Delete অপারেশন (Delete Operation)

Delete অপারেশন ডেটাবেস থেকে রেকর্ড মুছতে ব্যবহৃত হয়। EF তে, আপনি DbSet থেকে একটি Entity অবজেক্ট রিমুভ করে, তারপর SaveChanges() কল করে ডেটাবেস থেকে রেকর্ডটি মুছে ফেলতে পারেন।

Delete অপারেশন উদাহরণ

using (var context = new SchoolContext())
{
    // স্টুডেন্টটি রিট্রাইভ করুন
    var student = context.Students.FirstOrDefault(s => s.StudentId == 1);

    if (student != null)
    {
        context.Students.Remove(student); // Entity রিমুভ করা
        context.SaveChanges(); // Save changes to the database
    }
}

এখানে:

  • context.Students.Remove(student): রিট্রাইভ করা স্টুডেন্টটি DbSet থেকে রিমুভ করা হয়েছে।
  • SaveChanges(): ডেটাবেসে রেকর্ডটি মুছে ফেলা হয়েছে।

CRUD অপারেশন সমূহে LINQ এবং Raw SQL কুয়েরি ব্যবহার

Entity Framework এ CRUD অপারেশন সমূহে LINQ ব্যবহার করতে পারেন। তবে যদি আপনি Raw SQL কুয়েরি ব্যবহার করতে চান, তাও সম্ভব।

LINQ কুয়েরি উদাহরণ

using (var context = new SchoolContext())
{
    var studentsOlderThan20 = context.Students
                                      .Where(s => s.Age > 20)
                                      .ToList();

    foreach (var student in studentsOlderThan20)
    {
        Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    }
}

Raw SQL কুয়েরি উদাহরণ

using (var context = new SchoolContext())
{
    var students = context.Students.FromSqlRaw("SELECT * FROM Students WHERE Age > {0}", 20).ToList();
    
    foreach (var student in students)
    {
        Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
    }
}

সারাংশ

Entity Framework তে CRUD অপারেশনগুলি খুবই সহজে করা যায়, যেখানে DbContext এবং DbSet ক্লাসের মাধ্যমে ডেটাবেসে রেকর্ড তৈরি, পড়া, আপডেট এবং মুছা সম্ভব। LINQ এবং Raw SQL কুয়েরি ব্যবহার করে আরও জটিল ডেটা অপারেশন করা যেতে পারে। EF এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে ডেটাবেসের সঙ্গে কার্যকরভাবে ইন্টিগ্রেট করতে পারেন।

common.content_added_by

LINQ ব্যবহার করে ডেটা কুয়েরি করা

189
189

LINQ (Language Integrated Query) একটি শক্তিশালী টুল যা C# বা VB.NET এর মতো ভাষার সাথে SQL-এ থাকা কুয়েরি ফাংশনালিটি ইন্টিগ্রেট করে। LINQ ডেটা কুয়েরি করার জন্য একটি সহজ, এক্সপ্রেসিভ এবং টাইপ-সেফ উপায় প্রদান করে, যা ডেটাবেস, অ্যারে, তালিকা (list), XML বা অন্যান্য ডেটা সোর্সে কুয়েরি চালাতে ব্যবহৃত হয়। Entity Framework (EF) এ LINQ ব্যবহার করে ডেটাবেস থেকে ডেটা কুয়েরি করা যায়, যা SQL-এর মতো কার্যকর কিন্তু আরও সিম্পল এবং টাইপ-সেফ।


LINQ কী এবং এর সুবিধাসমূহ

LINQ এক ধরনের কুয়েরি সিনট্যাক্স সরবরাহ করে যা বিভিন্ন ডেটা সোর্সের উপর কাজ করে। এটি মূলত দুটি প্রধান প্রকারে বিভক্ত:

  • LINQ to Objects: অ্যারে, তালিকা বা অন্য কোনো ইন-মেমরি ডেটা স্ট্রাকচার থেকে ডেটা কুয়েরি করতে ব্যবহৃত হয়।
  • LINQ to Entities: Entity Framework বা অন্য ORM টুলের মাধ্যমে ডেটাবেস থেকে ডেটা কুয়েরি করা হয়। এটি মূলত SQL কোডের অনুরূপ, তবে LINQ ব্যবহার করা হয় SQL-like কুয়েরি লেখার জন্য।

LINQ ব্যবহারের মূল সুবিধাগুলি হলো:

  • টাইপ-সেফ: কোড কম্পাইল হওয়ার সময়ই আপনি ভুল সনাক্ত করতে পারেন।
  • ভাল পারফরম্যান্স: LINQ সরাসরি ডেটাবেসের সাথে কাজ করে, এবং সঠিক SQL কোড তৈরি করে।
  • সহজ সিনট্যাক্স: LINQ কোড লেখা সহজ এবং পরিষ্কার, বিশেষ করে জটিল কুয়েরি গঠন করা সহজ হয়।

LINQ দিয়ে Entity Framework এ ডেটা কুয়েরি করা

EF এর সাথে LINQ ব্যবহার করে ডেটা কুয়েরি করা অনেক সহজ। Entity Framework নিজেই LINQ কোডকে SQL কুয়েরিতে রূপান্তর করে এবং ডেটাবেসে চালানোর জন্য প্রেরণ করে।

LINQ Syntax

LINQ এর দুটি প্রধান সিনট্যাক্স রয়েছে:

  1. Query Syntax (SQL-এর মতো)
  2. Method Syntax (ফাংশনাল প্রোগ্রামিং স্টাইলে)

এখানে, উভয় সিনট্যাক্সের উদাহরণ দেওয়া হয়েছে, যাতে আপনি আপনার প্রয়োজন অনুযায়ী ব্যবহার করতে পারেন।


Query Syntax (SQL-এর মতো)

Query Syntax হলো SQL-র মতো একটি স্টাইল যেখানে আপনি from, where, select, orderby ইত্যাদি কীওয়ার্ড ব্যবহার করে কুয়েরি লেখেন। এটি দেখতে অনেকটা SQL কুয়েরির মতো।

উদাহরণ:

var customers = from c in context.Customers
                where c.City == "Dhaka"
                orderby c.Name
                select c;

এই কুয়েরি ডেটাবেস থেকে "Dhaka" সিটির সকল কাস্টমারকে বের করবে এবং তাদের নাম অনুসারে সাজাবে।

আরও উদাহরণ:

var filteredCustomers = from c in context.Customers
                        where c.Age > 30
                        select new { c.Name, c.Email };

এই কুয়েরি শুধুমাত্র ৩০ বছরের বেশি বয়সী কাস্টমারদের নাম এবং ইমেল দেখাবে।


Method Syntax (ফাংশনাল স্টাইল)

Method Syntax হলো ফাংশনাল প্রোগ্রামিং পদ্ধতি, যেখানে LINQ মেথডগুলো ব্যবহার করা হয় যেমন Where(), Select(), OrderBy(), GroupBy() ইত্যাদি।

উদাহরণ:

var customers = context.Customers
                       .Where(c => c.City == "Dhaka")
                       .OrderBy(c => c.Name)
                       .ToList();

এখানে Where() মেথডটি City == "Dhaka" শর্তে কাস্টমারদের ফিল্টার করবে এবং OrderBy() মেথডটি কাস্টমারদের নাম অনুযায়ী সাজাবে।

আরও উদাহরণ:

var filteredCustomers = context.Customers
                               .Where(c => c.Age > 30)
                               .Select(c => new { c.Name, c.Email })
                               .ToList();

এই কুয়েরি ৩০ বছরের বেশি বয়সী কাস্টমারদের নাম এবং ইমেল বের করবে।


LINQ এর আরও সাধারণ কার্যক্রম

  1. Where() - ডেটাতে শর্ত প্রয়োগ করতে ব্যবহৃত হয়।
  2. Select() - ডেটার নির্দিষ্ট অংশ নির্বাচন করতে ব্যবহৃত হয়।
  3. OrderBy() - ডেটাকে একটি নির্দিষ্ট ক্রমে সাজাতে ব্যবহৃত হয়।
  4. GroupBy() - ডেটাকে গ্রুপ করতে ব্যবহৃত হয়।
  5. Join() - দুটি ডেটাসেটের মধ্যে যোগসূত্র তৈরি করতে ব্যবহৃত হয়।

Asynchronous LINQ কুয়েরি

Entity Framework এ LINQ কুয়েরি করতে আপনি Asynchronous মেথড ব্যবহার করতে পারেন, যা ডেটাবেস কুয়েরি সম্পন্ন হওয়ার সময় আপনার অ্যাপ্লিকেশনকে ব্লক না করে অন্যান্য কাজ করতে সাহায্য করে। এটি পারফরম্যান্স উন্নত করতে সাহায্য করে, বিশেষ করে বড় ডেটাসেটের সাথে কাজ করার সময়।

উদাহরণ:

var customers = await context.Customers
                              .Where(c => c.City == "Dhaka")
                              .OrderBy(c => c.Name)
                              .ToListAsync();

এখানে ToListAsync() মেথডটি কুয়েরি সম্পন্ন হওয়া পর্যন্ত অ্যাসিঙ্ক্রোনাসভাবে অপেক্ষা করবে এবং তারপর ফলাফল ফিরিয়ে দেবে।


LINQ এবং Entity Framework এর পারফরম্যান্স

LINQ কুয়েরি চালানোর সময় Entity Framework অত্যন্ত কার্যকরী। EF নিজেই LINQ কুয়েরিগুলিকে দক্ষ SQL কুয়েরিতে রূপান্তর করে এবং ডেটাবেসে প্রেরণ করে। তবে কিছু ক্ষেত্রে ডেটাবেসের অকার্যকর কুয়েরি বা N+1 সমস্যা হতে পারে, যা পারফরম্যান্সকে প্রভাবিত করতে পারে।

পারফরম্যান্স অপটিমাইজেশনের জন্য:

  • Eager Loading: সম্পর্কযুক্ত ডেটা একবারে লোড করতে Include() মেথড ব্যবহার করুন।
  • No-Tracking Queries: যদি আপনি শুধুমাত্র রিড-অপারেশন করেন এবং ডেটা আপডেট করবেন না, তবে AsNoTracking() ব্যবহার করুন, যা কনটেক্সট ট্র্যাকিং বাদ দিয়ে পারফরম্যান্স উন্নত করবে।
var customers = context.Customers
                       .AsNoTracking()
                       .Where(c => c.City == "Dhaka")
                       .ToList();

সারাংশ

LINQ একটি শক্তিশালী এবং টাইপ-সেফ টুল যা C# ব্যবহারকারীদের জন্য ডেটা কুয়েরি সহজ করে তোলে। Entity Framework এর মাধ্যমে LINQ ব্যবহার করে ডেটাবেস থেকে ডেটা কুয়েরি করা সহজ, এবং এটি SQL কোডের মতোই কার্যকর। LINQ এর সাহায্যে আপনি বিভিন্ন ধরনের ডেটা অপারেশন যেমন ফিল্টার, অর্ডারিং, গ্রুপিং, এবং জটিল কুয়েরি গঠন করতে পারেন। Asynchronous LINQ ব্যবহার করে ডেটাবেস কুয়েরির পারফরম্যান্স আরও উন্নত করা যায়।

common.content_added_by

Stored Procedure এবং Raw SQL কুয়েরি ব্যবহার

196
196

Entity Framework (EF) সাধারণত LINQ (Language Integrated Query) ব্যবহার করে ডেটা কুয়েরি করে থাকে, তবে অনেক সময় ডেটাবেস সম্পর্কিত জটিল কুয়েরি বা স্পেসিফিক অপারেশন সম্পাদনের জন্য Stored Procedures বা Raw SQL Queries ব্যবহার করা প্রয়োজন হতে পারে। EF-এ এই দুটি অপশন ব্যবহারের মাধ্যমে আপনি উন্নত কুয়েরি অপ্টিমাইজেশন এবং ডেটাবেসের পারফরম্যান্স উন্নত করতে পারবেন।


Stored Procedure ব্যবহার

Stored Procedure হল ডেটাবেসে সংরক্ষিত একটি প্রি-কম্পাইলড SQL স্টেটমেন্ট বা ব্লক, যা একাধিক অপারেশন বা কুয়েরি একসাথে সম্পাদন করে। Entity Framework-এ Stored Procedure ব্যবহার করার জন্য, আপনি EF এর মাধ্যমে সেগুলো কল করতে পারেন এবং ফলাফল হ্যান্ডল করতে পারেন।


Stored Procedure কল করা

Entity Framework-এ Stored Procedure কল করার জন্য, আপনাকে DbContext এর মাধ্যমে সেই Stored Procedure এর নাম উল্লেখ করে কল করতে হবে। যদি Stored Procedure কোনো আউটপুট রিটার্ন করে, তবে আপনি তার ফলাফলগুলিকে একটি DbSet বা অন্য কোনো Collection-এ ম্যাপ করতে পারবেন।

using (var context = new YourDbContext())
{
    var result = context.Database
                        .SqlQuery<YourEntity>("EXEC YourStoredProcedure @param1, @param2", 
                                             new SqlParameter("@param1", value1),
                                             new SqlParameter("@param2", value2))
                        .ToList();
}

এখানে YourStoredProcedure হচ্ছে Stored Procedure এর নাম এবং YourEntity হচ্ছে সেই মডেল ক্লাস যেটি আপনি রিটার্নেড ডেটার সাথে ম্যাপ করতে চান।


Stored Procedure দিয়ে Insert, Update, Delete

Stored Procedure শুধু ডেটা রিড করতে নয়, Insert, Update, Delete অপারেশনও করতে পারে। নিচে একটি উদাহরণ দেওয়া হলো, যেখানে Stored Procedure ব্যবহার করে ডেটাবেসে Insert করা হয়েছে:

using (var context = new YourDbContext())
{
    var result = context.Database
                        .ExecuteSqlCommand("EXEC InsertUser @name, @email", 
                                           new SqlParameter("@name", "John Doe"),
                                           new SqlParameter("@email", "john.doe@example.com"));
}

এখানে ExecuteSqlCommand ব্যবহার করা হয়েছে কারণ এটি কোনো রিটার্ন ভ্যালু প্রদান করবে না। এটি শুধুমাত্র SQL কমান্ড বা Stored Procedure চালায়।


Raw SQL কুয়েরি ব্যবহার

Entity Framework এর মাধ্যমে আপনি Raw SQL Queries ব্যবহার করতে পারেন, যেখানে আপনি ম্যানুয়ালি SQL কুয়েরি লিখে ডেটাবেস থেকে ডেটা ফেচ করতে পারেন। Raw SQL Query ব্যবহার করার সময়, EF আপনাকে কুয়েরি ফরম্যাটের সঠিকতা নিশ্চিত করতে সাহায্য করবে।


Raw SQL কুয়েরি দিয়ে ডেটা ফেচ করা

যখন আপনি Raw SQL কুয়েরি ব্যবহার করেন, তখন আপনার ডেটাবেসের টেবিলের সাথে সঠিক Entity ক্লাসের ম্যাপিং নিশ্চিত করতে হবে।

using (var context = new YourDbContext())
{
    var users = context.Users
                       .FromSqlRaw("SELECT * FROM Users WHERE Age > {0}", 18)
                       .ToList();
}

এখানে FromSqlRaw ব্যবহার করা হয়েছে, যার মাধ্যমে আপনি SQL কুয়েরি রান করতে পারেন এবং ডেটাবেস থেকে ফলাফল মডেল ক্লাসে ম্যাপ হয়।


Raw SQL কুয়েরি দিয়ে Update বা Delete

Raw SQL কুয়েরি দিয়ে আপনি ডেটাবেসে Update বা Delete অপারেশনও করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:

using (var context = new YourDbContext())
{
    var result = context.Database
                        .ExecuteSqlRaw("UPDATE Users SET Age = Age + 1 WHERE Age < {0}", 30);
}

এখানে ExecuteSqlRaw ব্যবহার করা হয়েছে যা Update বা Delete অপারেশন পরিচালনা করে এবং কোনো ভ্যালু রিটার্ন করে না।


Stored Procedure এবং Raw SQL কুয়েরি ব্যবহার করার সুবিধা

  • Performance: Complex queries বা large data sets এর ক্ষেত্রে, Stored Procedure এবং Raw SQL Queries ব্যবহারের মাধ্যমে পারফরম্যান্স বৃদ্ধি পায়।
  • Flexibility: যখন আপনাকে কাস্টম বা জটিল SQL কুয়েরি করতে হয়, তখন Raw SQL Queries বা Stored Procedures সুবিধাজনক হয়।
  • Optimized Execution: Stored Procedures ডেটাবেসের মধ্যে সংরক্ষিত থাকে এবং একাধিক বার ব্যবহার করা যায়, যার ফলে কোডের পুনঃব্যবহারযোগ্যতা বাড়ে এবং পারফরম্যান্স উন্নত হয়।

Stored Procedure এবং Raw SQL কুয়েরি ব্যবহারের সীমাবদ্ধতা

  • Hardcoded SQL: Raw SQL কুয়েরি ব্যবহার করলে কোডে SQL স্টেটমেন্টগুলি হার্ডকোড করা হয়, যা Maintenance এবং Refactoring এর সময় সমস্যা সৃষ্টি করতে পারে।
  • Database Dependency: Raw SQL এবং Stored Procedure ডেটাবেস-নির্ভর কোডের সৃষ্টি করে, যার মানে হলো, ডেটাবেস পরিবর্তন হলে কোড আপডেট করতে হতে পারে।
  • SQL Injection Risk: সঠিক প্যারামিটারাইজড কুয়েরি না ব্যবহার করলে SQL Injection এর ঝুঁকি বাড়তে পারে। তবে, প্যারামিটার ব্যবহার করলে এই ঝুঁকি অনেকটাই কমে যায়।

সারাংশ

Stored Procedure এবং Raw SQL কুয়েরি ব্যবহার করা Entity Framework এ আরও উন্নত এবং কাস্টম ডেটাবেস অপারেশন পরিচালনার জন্য সহায়ক। এগুলি ডেটাবেস পারফরম্যান্স বৃদ্ধি করতে পারে এবং কাস্টম SQL কুয়েরি ব্যবহারের সুযোগ প্রদান করে। তবে, এগুলোর ব্যবহার সঠিকভাবে করা উচিত, যাতে কোডের সুরক্ষা এবং Maintenance সুবিধাজনক থাকে।

common.content_added_by

ট্রানজেকশন (Transactions) ব্যবহারের পদ্ধতি

206
206

Entity Framework (EF) ট্রানজেকশন ব্যবহারের জন্য একটি শক্তিশালী মেকানিজম সরবরাহ করে, যা আপনাকে একাধিক ডেটাবেস অপারেশনকে একত্রে একটানা কার্যকরী করতে সাহায্য করে। ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে, একাধিক অপারেশন একযোগভাবে সফলভাবে সম্পন্ন হচ্ছে, অন্যথায় কোনো একটি অপারেশন ব্যর্থ হলে, পূর্বের সমস্ত অপারেশন রোলব্যাক (rollback) করা হবে, যাতে ডেটাবেসের অখণ্ডতা বজায় থাকে।


ট্রানজেকশন কী এবং কেন প্রয়োজন

ট্রানজেকশন হল একটি অ্যাটমিক ইউনিট যা ডেটাবেসে এক বা একাধিক কার্যক্রম সম্পাদিত করে। একটি ট্রানজেকশনের প্রধান উদ্দেশ্য হল ডেটাবেসের অবস্থা সঠিক এবং অখণ্ড রাখা। এতে ৪টি মূল বৈশিষ্ট্য থাকে, যা ACID (Atomicity, Consistency, Isolation, Durability) নামক গুণাবলী হিসেবে পরিচিত।

  • Atomicity: একটি ট্রানজেকশনে সমস্ত কার্যক্রম একত্রে সফলভাবে সম্পন্ন হওয়া উচিত, বা সব কিছু বাতিল হয়ে যেতে হবে।
  • Consistency: ডেটাবেসের শুরুর এবং শেষের অবস্থার মধ্যে সঙ্গতি থাকতে হবে।
  • Isolation: একাধিক ট্রানজেকশন একে অপরকে হস্তক্ষেপ না করে কাজ করতে পারবে।
  • Durability: একবার ট্রানজেকশন সফলভাবে সম্পন্ন হলে, সেই পরিবর্তন স্থায়ীভাবে ডেটাবেসে সঞ্চিত হবে।

Entity Framework এ ট্রানজেকশন ব্যবহারের পদ্ধতি

Entity Framework এ ট্রানজেকশন ব্যবহারের জন্য মূলত DbContext ব্যবহার করা হয়। EF ডিফল্টভাবে প্রতি SaveChanges() কলের সময় একটি ট্রানজেকশন শুরু করে, কিন্তু আপনি যদি নিজস্ব ট্রানজেকশন নিয়ন্ত্রণ করতে চান, তবে DbContext.Database.BeginTransaction() মেথড ব্যবহার করে এটি পরিচালনা করতে পারেন।

১. ডিফল্ট ট্রানজেকশন (Default Transaction) ব্যবহার করা

যখন আপনি SaveChanges() মেথড কল করেন, EF স্বয়ংক্রিয়ভাবে একটি ট্রানজেকশন শুরু করে। যদি সব অপারেশন সফল হয়, তবে ট্রানজেকশন কমিট (commit) হয়, এবং যদি কোনো অপারেশন ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক (rollback) করা হয়।

using (var context = new YourDbContext())
{
    var entity1 = new Entity1 { Property1 = "Value1" };
    var entity2 = new Entity2 { Property2 = "Value2" };
    
    context.Entity1s.Add(entity1);
    context.Entity2s.Add(entity2);

    // SaveChanges() স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালনা করবে
    context.SaveChanges();
}

২. নিজস্ব ট্রানজেকশন শুরু করা (Explicit Transactions)

আপনি যদি একটি ট্রানজেকশনের মধ্যে একাধিক ডেটাবেস অপারেশন করতে চান, তাহলে আপনাকে BeginTransaction ব্যবহার করতে হবে। এই পদ্ধতিতে, আপনি ট্রানজেকশন শুরু, কমিট, এবং রোলব্যাক পরিচালনা করতে পারবেন।

using (var context = new YourDbContext())
{
    // Explicitly start a transaction
    using (var transaction = context.Database.BeginTransaction())
    {
        try
        {
            var entity1 = new Entity1 { Property1 = "Value1" };
            var entity2 = new Entity2 { Property2 = "Value2" };
            
            context.Entity1s.Add(entity1);
            context.Entity2s.Add(entity2);

            // Save changes within the transaction
            context.SaveChanges();

            // Commit the transaction
            transaction.Commit();
        }
        catch (Exception)
        {
            // Rollback the transaction if any exception occurs
            transaction.Rollback();
            throw;
        }
    }
}

৩. Asynchronous ট্রানজেকশন ব্যবহারের পদ্ধতি

Asynchronous অপারেশনেও আপনি ট্রানজেকশন পরিচালনা করতে পারেন। SaveChangesAsync() এবং BeginTransactionAsync() মেথড ব্যবহার করে আপনি ব্যাকগ্রাউন্ডে ট্রানজেকশন পরিচালনা করতে পারেন।

using (var context = new YourDbContext())
{
    // Explicitly start a transaction
    using (var transaction = await context.Database.BeginTransactionAsync())
    {
        try
        {
            var entity1 = new Entity1 { Property1 = "Value1" };
            var entity2 = new Entity2 { Property2 = "Value2" };
            
            context.Entity1s.Add(entity1);
            context.Entity2s.Add(entity2);

            // Save changes asynchronously within the transaction
            await context.SaveChangesAsync();

            // Commit the transaction
            await transaction.CommitAsync();
        }
        catch (Exception)
        {
            // Rollback the transaction if any exception occurs
            await transaction.RollbackAsync();
            throw;
        }
    }
}

৪. TransactionScope ব্যবহার করে ট্রানজেকশন পরিচালনা

যদি আপনি একাধিক ডেটাবেসে বা ডিস্ট্রিবিউটেড ট্রানজেকশন পরিচালনা করতে চান, তবে TransactionScope ব্যবহার করা যেতে পারে। এটি একাধিক DbContext বা বিভিন্ন সিস্টেমে ডেটাবেস ট্রানজেকশন পরিচালনার জন্য উপযুক্ত।

using (var scope = new TransactionScope())
{
    using (var context1 = new YourDbContext())
    {
        context1.Entity1s.Add(new Entity1 { Property1 = "Value1" });
        context1.SaveChanges();
    }
    
    using (var context2 = new AnotherDbContext())
    {
        context2.Entity2s.Add(new Entity2 { Property2 = "Value2" });
        context2.SaveChanges();
    }

    // Complete the transaction
    scope.Complete();
}

সারাংশ

Entity Framework এ ট্রানজেকশন ব্যবহারের মাধ্যমে আপনি একাধিক ডেটাবেস অপারেশনকে একত্রে সফলভাবে সম্পন্ন করতে পারেন, অথবা কোনো একটি অপারেশন ব্যর্থ হলে পুরো প্রক্রিয়া রোলব্যাক করতে পারেন। আপনি DbContext.Database.BeginTransaction() বা TransactionScope ব্যবহার করে স্বতন্ত্র ট্রানজেকশন তৈরি করতে পারেন, যা ডেটাবেসের অবস্থা অখণ্ড রাখার জন্য খুবই গুরুত্বপূর্ণ। EF ডিফল্টভাবে ট্রানজেকশন পরিচালনা করে, তবে আপনি প্রয়োজন অনুসারে এটি কাস্টমাইজ করতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion